package com.yswy.backstage.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yswy.backstage.service.SsoService;
import com.yswy.backstage.service.TgEventEnumsService;
import com.yswy.common.enums.TfPlatformEnums;
import com.yswy.common.enums.TriggerNodeEnums;
import com.yswy.common.enums.base.Type3Enum;
import com.yswy.common.enums.base.TypeEnum;
import com.yswy.common.utils.StringUtils;
import com.yswy.domain.common.BasePojo;
import com.yswy.domain.entity.tf.TgEvent;
import com.yswy.domain.entity.tf.TgEventChild;
import com.yswy.domain.entity.tf.TgEventEnums;
import com.yswy.domain.entity.user.User;
import com.yswy.domain.framework.context.CurrentUserContext;
import com.yswy.domain.mapper.tf.TgEventEnumsMapper;
import com.yswy.domain.mapper.tf.TgEventMapper;
import com.yswy.domain.vo.dto.BaseFilter;
import com.yswy.domain.vo.gld.addOrUpate.TgEventAddOrUpdate;
import com.yswy.domain.vo.gld.addOrUpate.TgEventChildAddOrUpdate;
import com.yswy.domain.vo.gld.addOrUpate.TgEventEnumsAddOrUpdate;
import com.yswy.domain.vo.gld.search.TgEventEnumsSearch;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;

import java.util.ArrayList;
import java.util.List;

import static com.yswy.backstage.utils.CrudUtils.selectCount;
import static com.yswy.common.constants.WarnMsgConstants.NULL_MSG;

@Slf4j
@Service
public class TgEventEnumsServiceImpl extends ServiceImpl<TgEventEnumsMapper, TgEventEnums>
        implements TgEventEnumsService {

    @Override
    public Page<TgEventEnums> pageTgEventEnums(TgEventEnumsSearch req) {
        if (StringUtils.isNotEmpty(req.getTfPlatform())){
            req.setTfPlatform(TypeEnum.messageOf(TfPlatformEnums.class , req.getTfPlatform()).toString());
        }
        Page<TgEventEnums> pageTgEventEnums = baseMapper.pageTgEventEnums(req
                , new Page<>(req.getPageNum() , req.getPageSize()) );
        for (TgEventEnums tgEventEnums:pageTgEventEnums.getRecords()){
            tgEventEnums.setTfPlatform(TypeEnum.typeEnumOf(TfPlatformEnums.class , tgEventEnums.getTfPlatform()).getMessage());

        }

        return pageTgEventEnums;
    }

    @Override
    public List<TgEventEnums> listTgEventEnums(String tfPlatform) {
        if (StringUtils.isNotEmpty(tfPlatform)){
            tfPlatform = TypeEnum.messageOf(TfPlatformEnums.class ,tfPlatform).toString();
        }
        List<TgEventEnums> tgEventEnumss = baseMapper.listTgEventEnums(tfPlatform );
        for (TgEventEnums tgEventEnums:tgEventEnumss){
            tgEventEnums.setTfPlatform(TypeEnum.typeEnumOf(TfPlatformEnums.class , tgEventEnums.getTfPlatform()).getMessage());

        }
        return tgEventEnumss;
    }

    @Override
    public Boolean isExist( String eventKey) {
        Integer count = count(new LambdaQueryWrapper<TgEventEnums>()
                .eq(TgEventEnums::getEventKey , eventKey)
                .eq(BasePojo::getIsDel , 0));
        if (count>0){
            return true ;
        }
        return false;
    }

    @Override
    public void addOrUpadteTgEventEnums(TgEventEnumsAddOrUpdate res) {
        User user = CurrentUserContext.getCurrentUser();
        Boolean isExist =  isExist(res.getEventKey());
        TgEventEnums tgEventEnums = null ;
        if (res.getId() != null){
            //更新数据
            tgEventEnums = getById(res.getId());
            if (isExist && !tgEventEnums.getEventKey().equals(res.eventKey)){
                throw new IllegalStateException("编号已存在");
            }
            if (StringUtils.isNotEmpty(res.getTfPlatform())){
                res.setTfPlatform(TypeEnum.messageOf(TfPlatformEnums.class , res.getTfPlatform()).toString());
            }
            Assert.state(null != tgEventEnums && null != tgEventEnums.getId(), NULL_MSG);
            BeanUtil.copyProperties(res, tgEventEnums);
            BasePojo.setBase(user.getId().longValue(), false, tgEventEnums);
            updateById(tgEventEnums);
        }else {
            if (isExist){
                throw new IllegalStateException("编号已存在");
            }
            tgEventEnums = new TgEventEnums(res , user);
            save(tgEventEnums);
        }
    }

    @Override
    public void delTgEventEnums(Long tgEventEnumsId) {
        User user = CurrentUserContext.getCurrentUser();
        Integer count = selectCount(baseMapper, s -> s.eq(BasePojo::getId, tgEventEnumsId));
        Assert.state(null != count && 0 < count, "未找到指定信息，请刷新重试");
        TgEventEnums bo = new TgEventEnums();
        bo.setId(tgEventEnumsId);
        bo.setIsDel(1);
        BasePojo.setBase(user.getId().longValue(), false, bo);
        updateById(bo);
    }
}
